package com.shopping.huaju.commodity.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 商品分类表
 * 
 * @author tofu
 * @email tofu@qq.com
 * @date 2023-11-01 10:37:04
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("commodity_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * id
	 */
	@TableId
	private Long id;
	/**
	 * 名称
	 */
	private String name;
	/**
	 * 父分类 id
	 */
	private Long parentId;
	/**
	 * 层级
	 */
	private Integer catLevel;
	/**
	 * 0 不显示，1 显示
	 */
	// #逻辑删除字段也可以通过注解@TableLogic在指定字段上进行指定逻辑字段
	//	    逻辑删除字段也可以通过注解@TableLogic在指定字段上进行指定逻辑字段
	//      logic-delete-field: isShow
	//      logic-delete-value: 0   # 默认值 为 1 指定该字段如果为0则表示该条记录被删除
	//      logic-not-delete-value: 1 # 默认值 为 0 指定该字段如果为1则表示该条记录被删除
	@TableLogic(value = "1",delval = "0")
	private Integer isShow;
	/**
	 * 排序
	 */
	private Integer sort;
	/**
	 * 图标
	 */
	private String icon;
	/**
	 * 统计单位
	 */
	private String proUnit;
	/**
	 * 商品数量
	 */
	private Integer proCount;

	// 1. 增加一个字段，childrenCategories 用于存放该分类下的所有子分类
	// 2. childrenCategories 在数据库中根据parentId 有隐式的体现了，不需要入库
	// 3. @TableField(exist = false) 表示该数据在表中是不存在的，即不需要入表的

	@TableField(exist = false)
	//@JsonInclude(JsonInclude.Include.NON_EMPTY)表示如果该属性为empty，则在返回Json数据的时候，不携带该 字段
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private List<CategoryEntity> childrenCategories;
}
